/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import controller.util.PagingInfo;
import dao.SituacaoDoDiplomaJpaController;
import dao.CursoJpaController;
import dao.DiplomaJpaController;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import pagecontroller.JsfUtil;
import dao.exceptions.NonexistentEntityException;
import java.util.ArrayList;
import java.util.Date;
import mail.Email;
import modelo.SituacaoDoDiploma;
import modelo.Curso;
import modelo.Diploma;
import modelo.SituacaoAluno;
import modelo.SituacaoDiploma;
import modelo.TipoCurso;
import org.apache.commons.mail.EmailException;
import pagecontroller.PageManager;

/**
 *
 * @author Dirac
 */
public class SituacaoDoDiplomaController {

    public SituacaoDoDiplomaController() {
        //FacesContext facesContext = FacesContext.getCurrentInstance();
        if (JsfUtil.getObjectFromSession("SituacaoDoDiplomaJpaController") == null) {
            jpaController = new SituacaoDoDiplomaJpaController();
        } else {
            jpaController = (SituacaoDoDiplomaJpaController) JsfUtil.getObjectFromSession("SituacaoDoDiplomaJpaController");
        }
    }
    private SituacaoDoDiploma situacaoDoDiploma = null;
    private List<SituacaoDoDiploma> situacaoDoDiplomas = null;
    private SituacaoDoDiplomaJpaController jpaController = null;
    private List<SituacaoDiploma> situacoes = null;
    private List<Curso> cursos = null;
    private TipoCurso tipoCurso;
    private boolean mandarEmail = false;

    public SituacaoDoDiploma getSituacaoDoDiploma() {
        if (situacaoDoDiploma == null) {
            situacaoDoDiploma = new SituacaoDoDiploma();
            situacaoDoDiploma.setDia(new Date());
        }
        return situacaoDoDiploma;
    }

    public String persiste() {
        if (this.situacaoDoDiploma.getId() == null) {
            return create();
        } else {
            return update();
        }
    }

    public String create() {
        try {
            Date date = new Date();
            situacaoDoDiploma.getDia().setHours(date.getHours());
            situacaoDoDiploma.getDia().setMinutes(date.getMinutes());

            jpaController.create(situacaoDoDiploma);
            JsfUtil.addSuccessMessage("adicionado com sucesso");
            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
            pm.setPageRelatDiploma();

            DiplomaController dc = (DiplomaController) JsfUtil.getObjectFromSession("DiplomaController");
            if (dc == null) {
                dc = new DiplomaController();
            }
            situacaoDoDiploma.getDiploma().setSituacaoDiploma(situacaoDoDiploma.getSituacaoDiploma());
            DiplomaJpaController djc = dc.getJpaController();

            //arrumar
            //alterar situação apenas quando a data for maior...
            List<SituacaoDoDiploma> sdd = jpaController.findToDiploma(situacaoDoDiploma.getDiploma());
            if (situacaoDoDiploma.getDia().before(sdd.get(0).getDia())) {
            }
            djc.edit(situacaoDoDiploma.getDiploma());

            dc.loadRelat(situacaoDoDiploma.getDiploma());


            if(this.mandarEmail){

            //enviar email para aluno
                
            String emailDetinatario = situacaoDoDiploma.getDiploma().getEmail();
            String titulo = "UTFPR - Situação de Seu Diploma alterado";
            
            String mensagem = "";
            
            mensagem +="UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ - Campo Mourão\n";
            mensagem +="SISTEMA DERAC-CM - Controle de Diploma \n";
            mensagem +="\n";
            mensagem +="Aluno: "+situacaoDoDiploma.getDiploma().getAluno()+"\n";
            mensagem +="Curso: "+situacaoDoDiploma.getDiploma().getCurso().getNome()+"\n";
            mensagem +="Sitauação Atual: "+situacaoDoDiploma.getDiploma().getSituacaoDiploma().situacao+"\n";
            mensagem +="Descrição: "+situacaoDoDiploma.getDescricao()+"\n";
            mensagem +="\n";
            mensagem +="\n";
            mensagem +="Caso você não seja "+situacaoDoDiploma.getDiploma().getAluno()+", Desconcidere este e-mail"+"\n";

                try {
                    Email email = new Email(emailDetinatario, titulo, mensagem);
                } catch (EmailException e) {
                    JsfUtil.addErrorMessage("O email para o aluno não pode ser enviado");
                }


               
            mandarEmail = false;
            }


        } catch (Exception e) {
            JsfUtil.addErrorMessage("Não foi possível crirar o registro");
        }
        return "refreshPage";
    }

    public String update() {
        try {
            jpaController.edit(this.situacaoDoDiploma);
            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
            pm.setPageRelatSituacaoDoDiploma();
//            JsfUtil.addSuccessMessage("situacaoDoDiploma salvo coms sucesso");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(SituacaoDoDiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(SituacaoDoDiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public String edit() {
        SituacaoDoDiploma arq = (SituacaoDoDiploma) JsfUtil.getObjectFromRequestParameter("situacaoDoDiploma");
        this.situacaoDoDiploma = arq;
        return "refreshPage";
    }

    public String destroy() {
        try {
            SituacaoDoDiploma arq = (SituacaoDoDiploma) JsfUtil.getObjectFromRequestParameter("situacaoDoDiploma");
            jpaController.destroy(this.situacaoDoDiploma.getId());
            JsfUtil.addSuccessMessage("situacaoDoDiploma removido com sucesso");
            novo();
            //tentativa de fazer com que o sistema retorne para tela de cadastro quando vier do cadatro e de consulta
            //quando vier de consulta
//            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
//            pm.setPageResultSearchSituacaoDoDiploma();

//            SituacaoDoDiplomaControllerSearch acs = (SituacaoDoDiplomaControllerSearch) JsfUtil.getObjectFromSession("SituacaoDoDiplomaControllerSearch");
//            if (acs != null) {
//                System.out.println(acs.removeSituacaoDoDiplomaList(arq));
//
//            }
//            boolean b = false;
//            if (acs != null) {
//                b = acs.removeSituacaoDoDiplomaList(arq);
//                if (b) {
//                    pm.setPageResultSearchSituacaoDoDiploma();
//                }
//            } else if (!b) {
//                this.novo();
//            }

        } catch (NonexistentEntityException ex) {
            Logger.getLogger(SituacaoDoDiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public List<SituacaoDoDiploma> getSituacaoDoDiplomas() {
        this.situacaoDoDiplomas = jpaController.findSituacaoDoDiplomaEntities();
        return this.situacaoDoDiplomas;
    }

    public List<SituacaoDiploma> getSituacoes() {
        this.situacoes = new ArrayList<SituacaoDiploma>();
        for (SituacaoDiploma situacao : SituacaoDiploma.values()) {
            this.situacoes.add(situacao);
        }
        return this.situacoes;
    }

    public List<Curso> getCursos() {
        CursoController cursoController = new CursoController();
        CursoJpaController cursoJpaController = cursoController.getJpaController();
        if (tipoCurso == null) {
            cursos = cursoJpaController.findCursoEntities();
        } else {
            cursos = cursoJpaController.findByTipoCurso(tipoCurso);
        }
        return cursos;

    }

    public SituacaoDoDiplomaJpaController getJpaController() {
        return jpaController;
    }

    public TipoCurso getTipoCurso() {
        return tipoCurso;
    }

    public void setTipoCurso(TipoCurso tipoCurso) {
        this.tipoCurso = tipoCurso;
    }

    public boolean isMandarEmail() {
        return mandarEmail;
    }

    public void setMandarEmail(boolean mandarEmail) {
        this.mandarEmail = mandarEmail;
    }

    


//    public String novo(Diploma diploma) {
//        situacaoDoDiploma = null;
//        tipoCurso = null;
//
//        getSituacaoDoDiploma().setDiploma(diploma);
//
//        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
//        pm.setPageCadSituacaoDoDiploma();
//        return "refreshPage";
//    }
    public String novoDeRelat() {
        situacaoDoDiploma = null;
        DiplomaController dc = (DiplomaController) JsfUtil.getObjectFromSession("DiplomaController");
        if (dc != null) {
            getSituacaoDoDiploma().setDiploma(dc.getDiploma());
        }
        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageCadSituacaoDoDiploma();
        return "refreshPage";
    }

    public String novoDeSearchResult() {
        situacaoDoDiploma = null;
        getSituacaoDoDiploma().setDiploma((Diploma) JsfUtil.getObjectFromRequestParameter("diplomaAux"));

        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageCadSituacaoDoDiploma();
        return "refreshPage";
    }

    public String novo() {
        situacaoDoDiploma = null;
        tipoCurso = null;

        getSituacaoDoDiploma().setDiploma(getDiploma());

        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageCadSituacaoDoDiploma();
        return "refreshPage";
    }

    public String load() {
        situacaoDoDiploma = (SituacaoDoDiploma) JsfUtil.getObjectFromRequestParameter("arq");
        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageRelatSituacaoDoDiploma();
        return "refreshPage";
    }

    public Diploma getDiploma() {
        if (situacaoDoDiploma.getDiploma() == null) {
            situacaoDoDiploma.setDiploma((Diploma) JsfUtil.getObjectFromRequestParameter("diplomaAux"));
        }
        if (situacaoDoDiploma.getDiploma() == null) {
            DiplomaController dc = (DiplomaController) JsfUtil.getObjectFromSession("DiplomaController");
            if (dc != null) {
                situacaoDoDiploma.setDiploma(dc.getDiploma());
            }
        }
        if (situacaoDoDiploma.getDiploma() == null) {
            situacaoDoDiploma.setDiploma(new Diploma());
        }
        return situacaoDoDiploma.getDiploma();
    }
}
